import store from '@/store'

// 需要登录才能访问的路由
const authRoutes = [
  '/profile',
  '/upload',
  '/my-videos',
  '/favorites'
]

// 需要管理员权限的路由
const adminRoutes = [
  '/admin',
  '/admin/users',
  '/admin/videos',
  '/admin/posts', // 添加帖子管理路由
  '/admin/comments',
  '/admin/categories',
  '/admin/settings' // 添加系统设置路由
]

// 路由守卫
export function setupRouteGuards(router) {
  router.beforeEach(async (to, from, next) => {
    // 获取登录状态
    const isAuthenticated = store.getters['auth/isAuthenticated']
    const isAdmin = store.getters['auth/isAdmin']
    
    // 如果有 token 但没有用户信息，尝试获取用户信息
    if (isAuthenticated && !store.state.auth.user) {
      try {
        await store.dispatch('auth/getProfile')
      } catch (error) {
        // 如果获取用户信息失败，可能是 token 过期
        store.dispatch('auth/logout')
        return next('/login')
      }
    }

    // 检查是否需要登录
    const requiresAuth = authRoutes.some(path => to.path.startsWith(path))
    // 检查是否需要管理员权限
    const requiresAdmin = adminRoutes.some(path => to.path.startsWith(path))

    if (requiresAdmin) {
      // 需要管理员权限
      if (!isAuthenticated) {
        // 未登录，跳转到登录页
        return next({
          path: '/login',
          query: { redirect: to.fullPath }
        })
      } else if (!isAdmin) {
        // 已登录但不是管理员，跳转到 403 页面
        return next('/403')
      }
    } else if (requiresAuth) {
      // 只需要登录
      if (!isAuthenticated) {
        return next({
          path: '/login',
          query: { redirect: to.fullPath }
        })
      }
    } else if (to.path === '/login' && isAuthenticated) {
      // 已登录用户访问登录页，重定向到首页
      return next('/')
    }

    // 其他情况正常通过
    next()
  })

  // 路由错误处理
  router.onError((error) => {
    console.error('路由错误:', error)
    // 可以在这里添加错误处理逻辑，比如显示错误提示或重定向到错误页面
  })
}